通过课程进入	题 号:	89	3.7 计算加减表达式	语言要求：	C++
编写程序，使其能读入并计算一个只包含加减运算的表达式，每一个输入的数据都是浮点数，除第一个数以外，
其余每个数前面都有一个运算符，表达式以分号“;”结束。
例如：
	23+43-233+234;

输入输出格式要求：
	要求输出小数点后6位。
	只输出运算结果，请不要输出其他字符，遇到异常情况（如结尾不是分号等），输出error
例如：
输入：23+43-233+234;回车
输出：67.000000
输入：23+43,回车
输出：error



#include<stdio.h>

#include<string.h>



	int z[20];

	double x[7];

	

double trans(char str[],int len)

{

	int flag=0,i,t=1,st=0;

	double n=0; 

	int end=len;

    for (i=0;i<end;i++)

    if (str[i]=='.')

    	flag=i;

	if (flag!=0)

		end=flag;

	for (i=end-1;i>=st;i--)

		n=n+z[end-i]*(str[i]-'0');

	if (flag!=0)

	{

		end=len;

		st=flag+1;

		for(i=st;i<end;i++)

		n=n+x[i-st+1]*(str[i]-'0');		

	}

	return n;

}

int main()

{

    int i,sign=1,head=0,tail,t;

	double f=0,tem=0;

	char a[10000];

	char b[1000];

	z[1]=1;

	for (i=2;i<=10;i++)

	z[i]=z[i-1]*10; 

	x[1]=0.1;

	for (i=2;i<=6;i++)

	x[i]=x[i-1]/10;

	gets(a);

	tail=strlen(a)-1;

    while (sign!=0)

	{

		for (i=0;i<=10;i++);

		b[i]='\0';

		t=0;

	    while ( ((a[head]<='9')&&(a[head]>='0')) || (a[head]=='.'))

	    {

			b[t]=a[head];

			head++;	

			t++;    

		}

		if (t==0)

		 	{

				printf("error");

				return 0;

			}

		tem=trans(b,t);

		f=f+sign*tem;

		if (a[head]=='+')

		sign=1;

		else if (a[head]=='-')

		sign=-1;

		else if (a[head]==';')

		sign=0;

		else 

		{

			printf("error");

			return 0;

		}

		head++;

}

	printf("%.6f",f);

	return 0;  
}